﻿using System;
using System.Collections.Generic;
using System.IO;

using System.Reflection;
using System.Runtime.InteropServices;
using System.Text;
using Office = Microsoft.Office.Core;
using OL = Microsoft.Office.Interop.Outlook;
using System.Windows.Forms;
using ConvergensDominoConnector;



namespace CDCOSDH
{
    [ComVisible(true)]
    public class RibbonCDCOSDH : Office.IRibbonExtensibility
    {
        private Office.IRibbonUI ribbon;

        public RibbonCDCOSDH()
        {
        }

        #region IRibbonExtensibility Members

        public string GetCustomUI(string ribbonID)
        {
            return GetResourceText("CDCOSDH.RibbonCDCOSDH.xml");
        }

        #endregion

        #region Ribbon Callbacks
        //Create callback methods here. For more information about adding callback methods, select the Ribbon XML item in Solution Explorer and then press F1

        public void Ribbon_Load(Office.IRibbonUI ribbonUI)
        {
            this.ribbon = ribbonUI;
        }

        public void OnCDCOJournalise(Office.IRibbonControl control)
        {
            try
            {
                OL.Application application = Globals.CDCOSDHAddIn.Application;
                var windowType = Globals.CDCOSDHAddIn.Application.ActiveWindow();
                if (windowType is OL.Explorer)
                {
                    List<Object> selectedItemList = ItemSelector.ValidateActiveExplorerSelection(application);
                    if (selectedItemList.Count == 0)
                    {
                        throw new Exception("Der er ikke valgt nogen mail til journalisering.\nMarker en mail og prøv igen.");
                    }

                    if (selectedItemList.Count > 1)
                    {
                        throw new Exception("Der kan kun journaliseres en mail af gangen.\nMarker kun en mail og prøv igen.");
                    }

                    foreach (object obj in selectedItemList)
                    {
                        if (obj is OL.AppointmentItem)
                        {
                            throw new Exception("Denne Outlook objekt type kan ikke journaliseres.\n\nOutlook objekt type: AppointmentItem");
                        }
                        else if (obj is OL.ContactItem)
                        {
                            throw new Exception("Denne Outlook objekt type kan ikke journaliseres.\n\nOutlook objekt type: ContactItem");
                        }
                        else if (obj is OL.JournalItem)
                        {
                            throw new Exception("Denne Outlook objekt type kan ikke journaliseres.\n\nOutlook objekt type: JournalItem");
                        }
                        else if (obj is OL.MailItem)
                        {
                            throw new Exception("Denne program version kan ikke journalisere");
                            //DominoConnector.Default.journalizeMailItem((OL.MailItem)selectedItemList[0]);
                        }
                        else if (obj is OL.NoteItem)
                        {
                            throw new Exception("Denne Outlook objekt type kan ikke journaliseres.\n\nOutlook objekt type: NoteItem");
                        }
                        else if (obj is OL.PostItem)
                        {
                            throw new Exception("Denne Outlook objekt type kan ikke journaliseres.\n\nOutlook objekt type: PostItem");
                        }
                        else if (obj is OL.RemoteItem)
                        {
                            throw new Exception("Denne Outlook objekt type kan ikke journaliseres.\n\nOutlook objekt type: RemoteItem");
                        }
                        else if (obj is OL.ReportItem)
                        {
                            throw new Exception("Denne program version kan ikke journalisere");
                            //DominoConnector.Default.journalizeReportItem((OL.ReportItem)selectedItemList[0]);
                        }
                        else if (obj is OL.TaskItem)
                        {
                            throw new Exception("Denne Outlook objekt type kan ikke journaliseres.\n\nOutlook objekt type: TaskItem");
                        }
                        else if (obj is OL.TaskRequestItem)
                        {
                            throw new Exception("Denne Outlook objekt type kan ikke journaliseres.\n\nOutlook objekt type: TaskRequestItem");
                        }
                        else if (obj is OL.DistListItem)
                        {
                            throw new Exception("Denne Outlook objekt type kan ikke journaliseres.\n\nOutlook objekt type: DistListItem");
                        }
                        else if (obj is OL.DocumentItem)
                        {
                            throw new Exception("Denne Outlook objekt type kan ikke journaliseres.\n\nOutlook objekt type: DocumentItem");
                        }
                        else if (obj is OL.MeetingItem)
                        {
                            DominoConnector.Default.journalizeMeetingItem((OL.MeetingItem)selectedItemList[0]);
                        }
                        else if (obj is OL.SharingItem)
                        {
                            throw new Exception("Denne Outlook objekt type kan ikke journaliseres.\n\nOutlook objekt type: SharingItem");
                        }
                        else if (obj is OL.StorageItem)
                        {
                            throw new Exception("Denne Outlook objekt type kan ikke journaliseres.\n\nOutlook objekt type: StorageItem");
                        }
                        else if (obj is OL.TaskRequestAcceptItem)
                        {
                            throw new Exception("Denne Outlook objekt type kan ikke journaliseres.\n\nOutlook objekt type: TaskRequestAcceptItem");
                        }
                        else if (obj is OL.TaskRequestDeclineItem)
                        {
                            throw new Exception("Denne Outlook objekt type kan ikke journaliseres.\n\nOutlook objekt type: TaskRequestDeclineItem");
                        }
                        else if (obj is OL.TaskRequestItem)
                        {
                            throw new Exception("Denne Outlook objekt type kan ikke journaliseres.\n\nOutlook objekt type: TaskRequestItem");
                        }
                        else if (obj is OL.TaskRequestUpdateItem)
                        {
                            throw new Exception("Denne Outlook objekt type kan ikke journaliseres.\n\nOutlook objekt type: TaskRequestUpdateItem");
                        }
                        else
                        {
                            throw new Exception("Tillykke :) \n\nDet burde ikke være muligt at få denne fejlbesked.\n" +
                            "Nu har jeg uden held forsøgt at journalisere følgende Outlook objekt typer:\n\n" +
                            "AppointmentItem\n" +
                            "ContactItem\n" +
                            "DistListItem\n" +
                            "DocumentItem\n" +
                            "JournalItem\n" +
                            "MailItem\n" +
                            "MeetingItem\n" +
                            "NoteItem\n" +
                            "PostItem\n" +
                            "RemoteItem\n" +
                            "ReportItem\n" +
                            "SharingItem\n" +
                            "StorageItem\n" +
                            "TaskItem\n" +
                            "TaskRequestAcceptItem\n" +
                            "TaskRequestDeclineItem\n" +
                            "TaskRequestItem\n" +
                            "TaskRequestUpdateItem\n" + "\n\nOutlook objekt type: Ukendt");
                        }
                    }
                }
                else if (windowType is OL.Inspector)
                {
                    Object obj = ItemSelector.ValidateActiveInspectorItem(application);

                    if (obj is OL.AppointmentItem)
                    {
                        throw new Exception("Denne Outlook objekt type kan ikke journaliseres.\n\nOutlook objekt type: AppointmentItem");
                    }
                    else if (obj is OL.ContactItem)
                    {
                        throw new Exception("Denne Outlook objekt type kan ikke journaliseres.\n\nOutlook objekt type: ContactItem");
                    }
                    else if (obj is OL.JournalItem)
                    {
                        throw new Exception("Denne Outlook objekt type kan ikke journaliseres.\n\nOutlook objekt type: JournalItem");
                    }
                    else if (obj is OL.MailItem)
                    {
                        throw new Exception("Denne program version kan ikke journalisere");
                        //DominoConnector.Default.journalizeMailItem((OL.MailItem)obj);
                    }
                    else if (obj is OL.NoteItem)
                    {
                        throw new Exception("Denne Outlook objekt type kan ikke journaliseres.\n\nOutlook objekt type: NoteItem");
                    }
                    else if (obj is OL.PostItem)
                    {
                        throw new Exception("Denne Outlook objekt type kan ikke journaliseres.\n\nOutlook objekt type: PostItem");
                    }
                    else if (obj is OL.RemoteItem)
                    {
                        throw new Exception("Denne Outlook objekt type kan ikke journaliseres.\n\nOutlook objekt type: RemoteItem");
                    }
                    else if (obj is OL.ReportItem)
                    {
                        throw new Exception("Denne program version kan ikke journalisere");
                        //DominoConnector.Default.journalizeReportItem((OL.ReportItem)obj);
                    }
                    else if (obj is OL.TaskItem)
                    {
                        throw new Exception("Denne Outlook objekt type kan ikke journaliseres.\n\nOutlook objekt type: TaskItem");
                    }
                    else if (obj is OL.TaskRequestItem)
                    {
                        throw new Exception("Denne Outlook objekt type kan ikke journaliseres.\n\nOutlook objekt type: TaskRequestItem");
                    }
                    else if (obj is OL.DistListItem)
                    {
                        throw new Exception("Denne Outlook objekt type kan ikke journaliseres.\n\nOutlook objekt type: DistListItem");
                    }
                    else if (obj is OL.DocumentItem)
                    {
                        throw new Exception("Denne Outlook objekt type kan ikke journaliseres.\n\nOutlook objekt type: DocumentItem");
                    }
                    else if (obj is OL.MeetingItem)
                    {
                        throw new Exception("Denne program version kan ikke journalisere");
                        //DominoConnector.Default.journalizeMeetingItem((OL.MeetingItem)obj);
                    }
                    else if (obj is OL.SharingItem)
                    {
                        throw new Exception("Denne Outlook objekt type kan ikke journaliseres.\n\nOutlook objekt type: SharingItem");
                    }
                    else if (obj is OL.StorageItem)
                    {
                        throw new Exception("Denne Outlook objekt type kan ikke journaliseres.\n\nOutlook objekt type: StorageItem");
                    }
                    else if (obj is OL.TaskRequestAcceptItem)
                    {
                        throw new Exception("Denne Outlook objekt type kan ikke journaliseres.\n\nOutlook objekt type: TaskRequestAcceptItem");
                    }
                    else if (obj is OL.TaskRequestDeclineItem)
                    {
                        throw new Exception("Denne Outlook objekt type kan ikke journaliseres.\n\nOutlook objekt type: TaskRequestDeclineItem");
                    }
                    else if (obj is OL.TaskRequestItem)
                    {
                        throw new Exception("Denne Outlook objekt type kan ikke journaliseres.\n\nOutlook objekt type: TaskRequestItem");
                    }
                    else if (obj is OL.TaskRequestUpdateItem)
                    {
                        throw new Exception("Denne Outlook objekt type kan ikke journaliseres.\n\nOutlook objekt type: TaskRequestUpdateItem");
                    }
                    else
                    {
                        throw new Exception("Tillykke :) \n\nDet burde ikke være muligt at få denne fejlbesked.\n" +
                        "Nu har jeg uden held forsøgt at journalisere følgende Outlook objekt typer:\n\n" +
                        "AppointmentItem\n" +
                        "ContactItem\n" +
                        "DistListItem\n" +
                        "DocumentItem\n" +
                        "JournalItem\n" +
                        "MailItem\n" +
                        "MeetingItem\n" +
                        "NoteItem\n" +
                        "PostItem\n" +
                        "RemoteItem\n" +
                        "ReportItem\n" +
                        "SharingItem\n" +
                        "StorageItem\n" +
                        "TaskItem\n" +
                        "TaskRequestAcceptItem\n" +
                        "TaskRequestDeclineItem\n" +
                        "TaskRequestItem\n" +
                        "TaskRequestUpdateItem\n" + "\n\nOutlook objekt type: Ukendt");
                    }
                }
            }
            catch (System.Runtime.InteropServices.COMException cx)
            {
                if (cx.ErrorCode == -2147467259)
                {
                    //Suppress
                    return;
                }

                MessageBox.Show(cx.Message, "Convergens Domino Connector for SDH", MessageBoxButtons.OK, MessageBoxIcon.Error);

            }
            catch (ApplicationException ex)
            {
                MessageBox.Show(ex.Message, "Convergens Domino Connector for SDH", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Convergens Domino Connector for SDH", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        public void OnCDCOSDHJournalise(Office.IRibbonControl control)
        {
            try
            {
                DominoConnector.Default.FindSDHProfilDB();
                DominoConnector.Default.FindMiniNabDB();
              
                OL.Application application = Globals.CDCOSDHAddIn.Application;
                var windowType = Globals.CDCOSDHAddIn.Application.ActiveWindow();
                if (windowType is OL.Explorer)
                {


                    List<Object> selectedItemList = ItemSelector.ValidateActiveExplorerSelection(application);
                    if (selectedItemList.Count == 0)
                    {
                        throw new Exception("Der er ikke valgt nogen mail til journalisering.\nMarker en mail og prøv igen.");
                    }

                    if (selectedItemList.Count == 1)
                    {
                        using (JournalizeSingle jSingle = new JournalizeSingle((object)selectedItemList[0]))
                        {
                            if (jSingle.ShowDialog() == DialogResult.OK)
                            {
                                JournalizeSingleValues jsv = new JournalizeSingleValues();
                                jsv.JnalSgl_TbCaseNum = jSingle.tbCaseNumTxt;
                                jsv.JnalSgl_TbSeqNum = jSingle.tbSeqNumTxt;
                                jsv.JnalSgl_LbTitle = jSingle.lbCaseSubjectTxt;
                                jsv.JnalSgl_CbSDH = jSingle.cbSDHTxt;
                                jsv.JnalSgl_CbRlpyReq = jSingle.cbRlpyReqTxt;
                                jsv.JnalSgl_CbCaseOfr = jSingle.cbCaseOfrTxt;
                                jsv.JnalSgl_TbDocName = jSingle.tbDocNameTxt;
                                jsv.JnalSgl_LbMailRightSelected = jSingle.MailRightSelectedTxt;
                                jsv.JnalSgl_TbRemarks = jSingle.tbRemarksTxt;
                                jsv.JnalSgl_CbCaseParts = jSingle.cbCasePartsTxt;
                                jsv.JnalSgl_CbFreeCat = jSingle.FreeCatsSelectedTxt;
                                jsv.JnalSgl_LbCaseArea = jSingle.lbCaseAreaTxt;
                                jsv.JnalSgl_LbEdction = jSingle.lbEdctionTxt;
                                jsv.JnalSgl_LbInstitution = jSingle.lbInstitutionTxt;
                                jsv.JnalSgl_LbLeglAspcts = jSingle.lbLeglAspctsTxt;
                                jsv.JnalSgl_LbEcoAspcts = jSingle.lbEcoAspctsTxt;
                                jsv.JnalSgl_CbOpenCase = jSingle.cbOpenCaseValue;

                                DominoConnector.Default.journalizeMailItem((OL.MailItem)selectedItemList[0], jsv, false, false);

                                jsv = null;
                            }
                            else
                            {
                                jSingle.Close();
                                return;
                            }
                        }

                    }

                    if (selectedItemList.Count > 1)
                    {
                        using (JournalizeMulti jMutli = new JournalizeMulti())
                        {
                            if (jMutli.ShowDialog() == DialogResult.OK)
                            {
                                JournalizeSingleValues jsv = new JournalizeSingleValues();
                                jsv.JnalSgl_TbCaseNum = jMutli.tbCaseNumTxt;
                                jsv.JnalSgl_LbTitle = jMutli.lbCaseSubjectTxt;
                                jsv.JnalSgl_CbSDH = jMutli.cbSDHTxt;
                                jsv.JnalSgl_CbRlpyReq = jMutli.cbRlpyReqTxt;
                                jsv.JnalSgl_CbCaseOfr = jMutli.cbCaseOfrTxt;
                                jsv.JnalSgl_LbMailRightSelected = jMutli.MailRightSelectedTxt;
                                jsv.JnalSgl_TbRemarks = jMutli.tbRemarksTxt;
                                jsv.JnalSgl_CbCaseParts = jMutli.cbCasePartsTxt;
                                jsv.JnalSgl_CbFreeCat = jMutli.FreeCatsSelectedTxt;
                                jsv.JnalSgl_LbCaseArea = jMutli.lbCaseAreaTxt;
                                jsv.JnalSgl_LbEdction = jMutli.lbEdctionTxt;
                                jsv.JnalSgl_LbInstitution = jMutli.lbInstitutionTxt;
                                jsv.JnalSgl_LbLeglAspcts = jMutli.lbLeglAspctsTxt;
                                jsv.JnalSgl_LbEcoAspcts = jMutli.lbEcoAspctsTxt;
                                jsv.JnalSgl_CbOpenCase = jMutli.cbOpenCaseValue;

                                foreach (var item in selectedItemList)
                                {
          
                                    DominoConnector.Default.journalizeMailItem((OL.MailItem)item, jsv, false, false);
                                }

                            }
                        }
                    }



                    foreach (object obj in selectedItemList)
                    {
                        if (obj is OL.AppointmentItem)
                        {
                            throw new Exception("Denne Outlook objekt type kan ikke journaliseres.\n\nOutlook objekt type: AppointmentItem");
                        }
                        else if (obj is OL.ContactItem)
                        {
                            throw new Exception("Denne Outlook objekt type kan ikke journaliseres.\n\nOutlook objekt type: ContactItem");
                        }
                        else if (obj is OL.JournalItem)
                        {
                            throw new Exception("Denne Outlook objekt type kan ikke journaliseres.\n\nOutlook objekt type: JournalItem");
                        }
                        else if (obj is OL.MailItem)
                        {
                            //throw new Exception("Denne program version kan ikke journalisere");
                            //DominoConnector.Default.journalizeMailItem((OL.MailItem)selectedItemList[0]);
                        }
                        else if (obj is OL.NoteItem)
                        {
                            throw new Exception("Denne Outlook objekt type kan ikke journaliseres.\n\nOutlook objekt type: NoteItem");
                        }
                        else if (obj is OL.PostItem)
                        {
                            throw new Exception("Denne Outlook objekt type kan ikke journaliseres.\n\nOutlook objekt type: PostItem");
                        }
                        else if (obj is OL.RemoteItem)
                        {
                            throw new Exception("Denne Outlook objekt type kan ikke journaliseres.\n\nOutlook objekt type: RemoteItem");
                        }
                        else if (obj is OL.ReportItem)
                        {
                            throw new Exception("Denne program version kan ikke journalisere");
                            //DominoConnector.Default.journalizeReportItem((OL.ReportItem)selectedItemList[0]);
                        }
                        else if (obj is OL.TaskItem)
                        {
                            throw new Exception("Denne Outlook objekt type kan ikke journaliseres.\n\nOutlook objekt type: TaskItem");
                        }
                        else if (obj is OL.TaskRequestItem)
                        {
                            throw new Exception("Denne Outlook objekt type kan ikke journaliseres.\n\nOutlook objekt type: TaskRequestItem");
                        }
                        else if (obj is OL.DistListItem)
                        {
                            throw new Exception("Denne Outlook objekt type kan ikke journaliseres.\n\nOutlook objekt type: DistListItem");
                        }
                        else if (obj is OL.DocumentItem)
                        {
                            throw new Exception("Denne Outlook objekt type kan ikke journaliseres.\n\nOutlook objekt type: DocumentItem");
                        }
                        else if (obj is OL.MeetingItem)
                        {
                            throw new Exception("Denne program version kan ikke journalisere");
                            //DominoConnector.Default.journalizeMeetingItem((OL.MeetingItem)selectedItemList[0]);
                        }
                        else if (obj is OL.SharingItem)
                        {
                            throw new Exception("Denne Outlook objekt type kan ikke journaliseres.\n\nOutlook objekt type: SharingItem");
                        }
                        else if (obj is OL.StorageItem)
                        {
                            throw new Exception("Denne Outlook objekt type kan ikke journaliseres.\n\nOutlook objekt type: StorageItem");
                        }
                        else if (obj is OL.TaskRequestAcceptItem)
                        {
                            throw new Exception("Denne Outlook objekt type kan ikke journaliseres.\n\nOutlook objekt type: TaskRequestAcceptItem");
                        }
                        else if (obj is OL.TaskRequestDeclineItem)
                        {
                            throw new Exception("Denne Outlook objekt type kan ikke journaliseres.\n\nOutlook objekt type: TaskRequestDeclineItem");
                        }
                        else if (obj is OL.TaskRequestItem)
                        {
                            throw new Exception("Denne Outlook objekt type kan ikke journaliseres.\n\nOutlook objekt type: TaskRequestItem");
                        }
                        else if (obj is OL.TaskRequestUpdateItem)
                        {
                            throw new Exception("Denne Outlook objekt type kan ikke journaliseres.\n\nOutlook objekt type: TaskRequestUpdateItem");
                        }
                        else
                        {
                            throw new Exception("Tillykke :) \n\nDet burde ikke være muligt at få denne fejlbesked.\n" +
                            "Nu har jeg uden held forsøgt at journalisere følgende Outlook objekt typer:\n\n" +
                            "AppointmentItem\n" +
                            "ContactItem\n" +
                            "DistListItem\n" +
                            "DocumentItem\n" +
                            "JournalItem\n" +
                            "MailItem\n" +
                            "MeetingItem\n" +
                            "NoteItem\n" +
                            "PostItem\n" +
                            "RemoteItem\n" +
                            "ReportItem\n" +
                            "SharingItem\n" +
                            "StorageItem\n" +
                            "TaskItem\n" +
                            "TaskRequestAcceptItem\n" +
                            "TaskRequestDeclineItem\n" +
                            "TaskRequestItem\n" +
                            "TaskRequestUpdateItem\n" + "\n\nOutlook objekt type: Ukendt");
                        }
                    }
                }
                else if (windowType is OL.Inspector)
                {
                    Object obj = ItemSelector.ValidateActiveInspectorItem(application);

                    if (obj is OL.AppointmentItem)
                    {
                        throw new Exception("Denne Outlook objekt type kan ikke journaliseres.\n\nOutlook objekt type: AppointmentItem");
                    }
                    else if (obj is OL.ContactItem)
                    {
                        throw new Exception("Denne Outlook objekt type kan ikke journaliseres.\n\nOutlook objekt type: ContactItem");
                    }
                    else if (obj is OL.JournalItem)
                    {
                        throw new Exception("Denne Outlook objekt type kan ikke journaliseres.\n\nOutlook objekt type: JournalItem");
                    }
                    else if (obj is OL.MailItem)
                    {
                        throw new Exception("Denne program version kan ikke journalisere");
                        //DominoConnector.Default.journalizeMailItem((OL.MailItem)obj);
                    }
                    else if (obj is OL.NoteItem)
                    {
                        throw new Exception("Denne Outlook objekt type kan ikke journaliseres.\n\nOutlook objekt type: NoteItem");
                    }
                    else if (obj is OL.PostItem)
                    {
                        throw new Exception("Denne Outlook objekt type kan ikke journaliseres.\n\nOutlook objekt type: PostItem");
                    }
                    else if (obj is OL.RemoteItem)
                    {
                        throw new Exception("Denne Outlook objekt type kan ikke journaliseres.\n\nOutlook objekt type: RemoteItem");
                    }
                    else if (obj is OL.ReportItem)
                    {
                        throw new Exception("Denne program version kan ikke journalisere");
                        //DominoConnector.Default.journalizeReportItem((OL.ReportItem)obj);
                    }
                    else if (obj is OL.TaskItem)
                    {
                        throw new Exception("Denne Outlook objekt type kan ikke journaliseres.\n\nOutlook objekt type: TaskItem");
                    }
                    else if (obj is OL.TaskRequestItem)
                    {
                        throw new Exception("Denne Outlook objekt type kan ikke journaliseres.\n\nOutlook objekt type: TaskRequestItem");
                    }
                    else if (obj is OL.DistListItem)
                    {
                        throw new Exception("Denne Outlook objekt type kan ikke journaliseres.\n\nOutlook objekt type: DistListItem");
                    }
                    else if (obj is OL.DocumentItem)
                    {
                        throw new Exception("Denne Outlook objekt type kan ikke journaliseres.\n\nOutlook objekt type: DocumentItem");
                    }
                    else if (obj is OL.MeetingItem)
                    {
                        throw new Exception("Denne program version kan ikke journalisere");
                        //DominoConnector.Default.journalizeMeetingItem((OL.MeetingItem)obj);
                    }
                    else if (obj is OL.SharingItem)
                    {
                        throw new Exception("Denne Outlook objekt type kan ikke journaliseres.\n\nOutlook objekt type: SharingItem");
                    }
                    else if (obj is OL.StorageItem)
                    {
                        throw new Exception("Denne Outlook objekt type kan ikke journaliseres.\n\nOutlook objekt type: StorageItem");
                    }
                    else if (obj is OL.TaskRequestAcceptItem)
                    {
                        throw new Exception("Denne Outlook objekt type kan ikke journaliseres.\n\nOutlook objekt type: TaskRequestAcceptItem");
                    }
                    else if (obj is OL.TaskRequestDeclineItem)
                    {
                        throw new Exception("Denne Outlook objekt type kan ikke journaliseres.\n\nOutlook objekt type: TaskRequestDeclineItem");
                    }
                    else if (obj is OL.TaskRequestItem)
                    {
                        throw new Exception("Denne Outlook objekt type kan ikke journaliseres.\n\nOutlook objekt type: TaskRequestItem");
                    }
                    else if (obj is OL.TaskRequestUpdateItem)
                    {
                        throw new Exception("Denne Outlook objekt type kan ikke journaliseres.\n\nOutlook objekt type: TaskRequestUpdateItem");
                    }
                    else
                    {
                        throw new Exception("Tillykke :) \n\nDet burde ikke være muligt at få denne fejlbesked.\n" +
                        "Nu har jeg uden held forsøgt at journalisere følgende Outlook objekt typer:\n\n" +
                        "AppointmentItem\n" +
                        "ContactItem\n" +
                        "DistListItem\n" +
                        "DocumentItem\n" +
                        "JournalItem\n" +
                        "MailItem\n" +
                        "MeetingItem\n" +
                        "NoteItem\n" +
                        "PostItem\n" +
                        "RemoteItem\n" +
                        "ReportItem\n" +
                        "SharingItem\n" +
                        "StorageItem\n" +
                        "TaskItem\n" +
                        "TaskRequestAcceptItem\n" +
                        "TaskRequestDeclineItem\n" +
                        "TaskRequestItem\n" +
                        "TaskRequestUpdateItem\n" + "\n\nOutlook objekt type: Ukendt");
                    }
                }
            }
            catch (System.Runtime.InteropServices.COMException cx)
            {
                if (cx.ErrorCode == -2147467259)
                {
                    //Suppress
                    return;
                }

                MessageBox.Show(cx.Message, "Convergens Domino Connector for SDH", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            catch (ApplicationException ex)
            {
                MessageBox.Show(ex.Message, "Convergens Domino Connector for SDH", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Convergens Domino Connector for SDH", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        public void OnCDCOSDHNewMailJournalise(Office.IRibbonControl control)
        {
            try
            {
                OL.Application application = Globals.CDCOSDHAddIn.Application;
                Object obj = ItemSelector.ValidateActiveInspectorItem(application);

                if (obj is OL.AppointmentItem)
                {
                    throw new Exception("Denne Outlook objekt type kan ikke journaliseres.\n\nOutlook objekt type: AppointmentItem");
                }
                else if (obj is OL.ContactItem)
                {
                    throw new Exception("Denne Outlook objekt type kan ikke journaliseres.\n\nOutlook objekt type: ContactItem");
                }
                else if (obj is OL.JournalItem)
                {
                    throw new Exception("Denne Outlook objekt type kan ikke journaliseres.\n\nOutlook objekt type: JournalItem");
                }
                else if (obj is OL.MailItem)
                {
                    OL.MailItem newMailItem = (OL.MailItem)obj;
                    newMailItem.Save();

                    if (newMailItem.To == string.Empty | newMailItem.To == null)
                    {
                        //Marshal.ReleaseComObject(newMailItem);
                        MessageBox.Show("Der skal angives mindst en modtager", "Convergens Domino Connector for SDH", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                        return;
                    }

                    if (newMailItem.Subject == string.Empty | newMailItem.Subject == null)
                    {
                        //Marshal.ReleaseComObject(newMailItem);
                        MessageBox.Show("Emne-feltet må ikke være tomt", "Convergens Domino Connector for SDH", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                        return;
                    }

                    newMailItem.Display(false);

                    DominoConnector.Default.FindSDHProfilDB();
                    DominoConnector.Default.FindMiniNabDB();

                    using (JournalizeSingle jSingle = new JournalizeSingle(newMailItem))
                    {
                        if (jSingle.ShowDialog() == DialogResult.OK)
                        {
                            JournalizeSingleValues jsv = new JournalizeSingleValues();
                            jsv.JnalSgl_TbCaseNum = jSingle.tbCaseNumTxt;
                            jsv.JnalSgl_TbSeqNum = jSingle.tbSeqNumTxt;
                            jsv.JnalSgl_LbTitle = jSingle.lbCaseSubjectTxt;
                            jsv.JnalSgl_CbSDH = jSingle.cbSDHTxt;
                            jsv.JnalSgl_CbRlpyReq = jSingle.cbRlpyReqTxt;
                            jsv.JnalSgl_CbCaseOfr = jSingle.cbCaseOfrTxt;
                            jsv.JnalSgl_TbDocName = jSingle.tbDocNameTxt;
                            jsv.JnalSgl_LbMailRightSelected = jSingle.MailRightSelectedTxt;
                            jsv.JnalSgl_TbRemarks = jSingle.tbRemarksTxt;
                            jsv.JnalSgl_CbCaseParts = jSingle.cbCasePartsTxt;
                            jsv.JnalSgl_CbFreeCat = jSingle.FreeCatsSelectedTxt;
                            jsv.JnalSgl_LbCaseArea = jSingle.lbCaseAreaTxt;
                            jsv.JnalSgl_LbEdction = jSingle.lbEdctionTxt;
                            jsv.JnalSgl_LbInstitution = jSingle.lbInstitutionTxt;
                            jsv.JnalSgl_LbLeglAspcts = jSingle.lbLeglAspctsTxt;
                            jsv.JnalSgl_LbEcoAspcts = jSingle.lbEcoAspctsTxt;
                            jsv.JnalSgl_CbOpenCase = jSingle.cbOpenCaseValue;

                            //newMailItem.Send();

                            DominoConnector.Default.journalizeMailItem(newMailItem, jsv, true, true);

                            jsv = null;
                        }
                        else
                        {
                            jSingle.Close();
                            return;
                        }
                    }
                }
                else if (obj is OL.NoteItem)
                {
                    throw new Exception("Denne Outlook objekt type kan ikke journaliseres.\n\nOutlook objekt type: NoteItem");
                }
                else if (obj is OL.PostItem)
                {
                    throw new Exception("Denne Outlook objekt type kan ikke journaliseres.\n\nOutlook objekt type: PostItem");
                }
                else if (obj is OL.RemoteItem)
                {
                    throw new Exception("Denne Outlook objekt type kan ikke journaliseres.\n\nOutlook objekt type: RemoteItem");
                }
                else if (obj is OL.ReportItem)
                {
                    throw new Exception("Denne program version kan ikke journalisere");
                    //DominoConnector.Default.journalizeReportItem((OL.ReportItem)obj);
                }
                else if (obj is OL.TaskItem)
                {
                    throw new Exception("Denne Outlook objekt type kan ikke journaliseres.\n\nOutlook objekt type: TaskItem");
                }
                else if (obj is OL.TaskRequestItem)
                {
                    throw new Exception("Denne Outlook objekt type kan ikke journaliseres.\n\nOutlook objekt type: TaskRequestItem");
                }
                else if (obj is OL.DistListItem)
                {
                    throw new Exception("Denne Outlook objekt type kan ikke journaliseres.\n\nOutlook objekt type: DistListItem");
                }
                else if (obj is OL.DocumentItem)
                {
                    throw new Exception("Denne Outlook objekt type kan ikke journaliseres.\n\nOutlook objekt type: DocumentItem");
                }
                else if (obj is OL.MeetingItem)
                {
                    throw new Exception("Denne program version kan ikke journalisere");
                    //DominoConnector.Default.journalizeMeetingItem((OL.MeetingItem)obj);
                }
                else if (obj is OL.SharingItem)
                {
                    throw new Exception("Denne Outlook objekt type kan ikke journaliseres.\n\nOutlook objekt type: SharingItem");
                }
                else if (obj is OL.StorageItem)
                {
                    throw new Exception("Denne Outlook objekt type kan ikke journaliseres.\n\nOutlook objekt type: StorageItem");
                }
                else if (obj is OL.TaskRequestAcceptItem)
                {
                    throw new Exception("Denne Outlook objekt type kan ikke journaliseres.\n\nOutlook objekt type: TaskRequestAcceptItem");
                }
                else if (obj is OL.TaskRequestDeclineItem)
                {
                    throw new Exception("Denne Outlook objekt type kan ikke journaliseres.\n\nOutlook objekt type: TaskRequestDeclineItem");
                }
                else if (obj is OL.TaskRequestItem)
                {
                    throw new Exception("Denne Outlook objekt type kan ikke journaliseres.\n\nOutlook objekt type: TaskRequestItem");
                }
                else if (obj is OL.TaskRequestUpdateItem)
                {
                    throw new Exception("Denne Outlook objekt type kan ikke journaliseres.\n\nOutlook objekt type: TaskRequestUpdateItem");
                }
                else
                {
                    throw new Exception("Tillykke :) \n\nDet burde ikke være muligt at få denne fejlbesked.\n" +
                    "Nu har jeg uden held forsøgt at journalisere følgende Outlook objekt typer:\n\n" +
                    "AppointmentItem\n" +
                    "ContactItem\n" +
                    "DistListItem\n" +
                    "DocumentItem\n" +
                    "JournalItem\n" +
                    "MailItem\n" +
                    "MeetingItem\n" +
                    "NoteItem\n" +
                    "PostItem\n" +
                    "RemoteItem\n" +
                    "ReportItem\n" +
                    "SharingItem\n" +
                    "StorageItem\n" +
                    "TaskItem\n" +
                    "TaskRequestAcceptItem\n" +
                    "TaskRequestDeclineItem\n" +
                    "TaskRequestItem\n" +
                    "TaskRequestUpdateItem\n" + "\n\nOutlook objekt type: Ukendt");
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Convergens Domino Connector for SDH", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }


        #endregion

        #region Helpers

        private static string GetResourceText(string resourceName)
        {
            Assembly asm = Assembly.GetExecutingAssembly();
            string[] resourceNames = asm.GetManifestResourceNames();
            for (int i = 0; i < resourceNames.Length; ++i)
            {
                if (string.Compare(resourceName, resourceNames[i], StringComparison.OrdinalIgnoreCase) == 0)
                {
                    using (StreamReader resourceReader = new StreamReader(asm.GetManifestResourceStream(resourceNames[i])))
                    {
                        if (resourceReader != null)
                        {
                            return resourceReader.ReadToEnd();
                        }
                    }
                }
            }
            return null;
        }

        #endregion
    }
}
